﻿using System;
using System.Data;
using System.Web.Security;
using AuctionSite.Entities;
using AuctionSite.Utils;
using System.Globalization;

namespace AuctionSite.BL
{
    public class UsuarioFacade
    {
        public Usuario NovoUsuario(
            string nome,
            string apelido,
            string telefone,
            string celular,
            string endereco,
            string cpf,
            string email,
            string senha,
            string tipoUsuario
            )
        {

            #region Mascara Telefone
            if (telefone.Length > 0)
            {
                telefone = telefone.ToString();
                telefone = telefone.Remove(0, 1);
                telefone = telefone.Remove(2, 2);
                telefone = telefone.Remove(6, 1);
            }
            else
                telefone = string.Empty;
            #endregion

            #region Mascara celular
            if (celular.Length > 0)
            {
                celular = celular.ToString();
                celular = celular.Remove(0, 1);
                celular = celular.Remove(2, 2);
                celular = celular.Remove(6, 1);
            }
            else
                celular = string.Empty;
            #endregion

            #region Mascara CPF
            if (cpf.Length > 0)
            {
                cpf = cpf.ToString();
                cpf = cpf.Remove(3, 1);
                cpf = cpf.Remove(6, 1);
                cpf = cpf.Remove(9, 1);
            }
            else
                cpf = null;
            #endregion

            #region Validação "Campos Em branco"
            if (nome.Trim().Length == 0)
            {
                throw new Exception("O nome é obrigatório");
            }

            if (apelido.Trim().Length == 0)
            {
                throw new Exception("O Apelido é obrigatório");
            }

            if (endereco.Trim().Length == 0)
            {
                throw new Exception("O Endereço é obrigatório");
            }
            if (cpf.Trim().Length == 0)
            {
                throw new Exception("O CPF é obrigatório");
            }
            if (email.Trim().Length == 0)
            {
                throw new Exception("O Email é obrigatório");
            }
            if (senha.Trim().Length == 0)
            {
                throw new Exception("A Senha é obrigatório");
            }
            #endregion

            Usuario usuario = new Usuario();
            usuario.Nome = nome;
            usuario.Apelido = apelido;
            usuario.Telefone = telefone;
            usuario.Celular = celular;
            usuario.Endereco = endereco;
            usuario.CPF = cpf;
            usuario.Email = email;
            usuario.Senha = FormsAuthentication.HashPasswordForStoringInConfigFile(senha, "sha1");
            usuario.Ativo = true;
            usuario.TipoUsuario = tipoUsuario;

            const string formato = "yyyy-MM-dd HH:mm:ss:fff";
            usuario.DataCadastro = DateTime.ParseExact(DateTime.Now.ToString(formato), formato, CultureInfo.InvariantCulture);

            UsuarioService usuarioService = new UsuarioService();
            return usuarioService.Incluir(usuario);
        }

        public Usuario ValidaLogin(string usuario, string senha)
        {
            if (!string.IsNullOrEmpty(usuario)
               && !string.IsNullOrEmpty(senha))
            {
                string sql = string.Format(
                    "SELECT * FROM usuarios where usu_email='{0}' AND usu_senha='{1}' ",
                    usuario,
                    FormsAuthentication.HashPasswordForStoringInConfigFile(senha, "sha1")
                    );

                DataTable dt = SQL.GetDataTableBySQL(sql);

                if (dt != null && dt.Rows.Count > 0)
                {
                    return new Usuario().Load(dt.Rows[0]);
                }
            }

            return null;
        }

        public DateTime DataTime { get; set; }
    }
}